﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AbstraX.ClientInterfaces;

namespace UnitTests.Classes
{
    public class Person : IRoot
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public List<Vehicle> Vehicles { get; set; }

        public Person(string name, int age)
        {
            this.Name = name;
            this.Age = age;
        }

        public string URL
        {
            get { throw new NotImplementedException(); }
        }

        public ProviderType ProviderType
        {
            get { throw new NotImplementedException(); }
        }

        public IType ReturnedType
        {
            get { throw new NotImplementedException(); }
        }

        public IEnumerable<IElement> RootElements
        {
            get { throw new NotImplementedException(); }
        }

        public string ID
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string ParentID
        {
            get { throw new NotImplementedException(); }
        }

        public IType DataType
        {
            get { throw new NotImplementedException(); }
        }

        public string Description
        {
            get { throw new NotImplementedException(); }
        }

        public string Documentation
        {
            get { throw new NotImplementedException(); }
        }

        public string InternalType
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string ImageURL
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public event ChildrenLoadedHandler ChildrenLoaded;

        public IBase Parent
        {
            get { throw new NotImplementedException(); }
        }

        public string FolderKeyPair
        {
            get { throw new NotImplementedException(); }
        }


        public void LoadChildren()
        {
            throw new NotImplementedException();
        }


        public System.ServiceModel.DomainServices.Client.DomainContext Context
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }


        public DefinitionKind Kind
        {
            get { throw new NotImplementedException(); }
        }

        public string ParentFieldName
        {
            get { throw new NotImplementedException(); }
        }


        public float ChildOrdinal
        {
            get { throw new NotImplementedException(); }
        }

        public string DebugInfo
        {
            get { throw new NotImplementedException(); }
        }

        public bool HasChildren
        {
            get { throw new NotImplementedException(); }
        }


        public IAbstraXExtension LoadExtension(IBase baseObject, MvvmTreeView.ITreeNode treeNode)
        {
            throw new NotImplementedException();
        }
    }

    public class Vehicle : IElement
    {
        public string Brand { get; set; }
        public VehicleType VehicleType { get; set; }

        public Vehicle(string brand, VehicleType type)
        {
            this.Brand = brand;
            this.VehicleType = type;
        }

        public IEnumerable<IAttribute> Attributes
        {
            get { throw new NotImplementedException(); }
        }

        public IEnumerable<IElement> ChildElements
        {
            get { throw new NotImplementedException(); }
        }

        public IEnumerable<IOperation> Operations
        {
            get { throw new NotImplementedException(); }
        }

        public string ID
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string ParentID
        {
            get { throw new NotImplementedException(); }
        }

        public string Name
        {
            get { throw new NotImplementedException(); }
        }

        public IType DataType
        {
            get { throw new NotImplementedException(); }
        }

        public string Description
        {
            get { throw new NotImplementedException(); }
        }

        public string Documentation
        {
            get { throw new NotImplementedException(); }
        }

        public string InternalType
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string ImageURL
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }


        public event ChildrenLoadedHandler ChildrenLoaded;

        public void LoadChildren()
        {
            throw new NotImplementedException();
        }


        public IBase Parent
        {
            get { throw new NotImplementedException(); }
        }

        public string FolderKeyPair
        {
            get { throw new NotImplementedException(); }
        }

        public bool IsContainer
        {
            get { throw new NotImplementedException(); }
        }


        public System.ServiceModel.DomainServices.Client.DomainContext Context
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }


        public DefinitionKind Kind
        {
            get { throw new NotImplementedException(); }
        }


        public float ChildOrdinal
        {
            get { throw new NotImplementedException(); }
        }

        public string DebugInfo
        {
            get { throw new NotImplementedException(); }
        }

        public bool HasChildren
        {
            get { throw new NotImplementedException(); }
        }


        public IRoot Root
        {
            get { throw new NotImplementedException(); }
        }

        public IAbstraXExtension LoadExtension(IBase baseObject, MvvmTreeView.ITreeNode treeNode)
        {
            throw new NotImplementedException();
        }
    }

    public enum VehicleType
    {
        Car,
        Truck,
        Motorcycle
    }
}
